package com.example.security.base.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
// 导入WebSecurityConfigurerAdapter类，这是Spring Security中用于自定义安全配置的基础类
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    // 重写configure(HttpSecurity http)方法，用于配置HTTP安全
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 开始配置HttpSecurity，这是构建基于HTTP的安全性的关键接口
        http
                // 配置授权请求的规则
                .authorizeRequests()
                // 对于路径匹配"/api/public/**"的请求，允许所有用户访问，无需认证
                .antMatchers("/api/public/**").permitAll()
                // 对于任何其他的请求，都需要用户经过认证才能访问
                .anyRequest().authenticated()
                .and() // 结束authorizeRequests配置，并返回HttpSecurity对象以继续配置其他安全特性
                // 配置表单登录
                .formLogin()
                // 设置登录成功后的默认跳转URL为"/index.html"
                .defaultSuccessUrl("/index.html")
                // 对于登录相关的URL（如登录页面、登录处理URL等），允许所有用户访问
                .permitAll()
                .and() // 结束formLogin配置，并返回HttpSecurity对象以继续配置
                // 配置注销登录
                .logout()
                // 对于注销相关的URL，允许所有用户访问
                .permitAll();
    }
}